Processors are designed to meet a variety of needs. Because each separate design is expensive, it makes sense to maximize the available features of a processor so that it can be used in as many situations as possible. It is typically advantageous to design a digital data processor having a pin out not allowing use all of features of the integrated circuit. Many of the internal components of a processor need to be connected to external circuitry to be of use. The physical size of the integrated circuit and other considerations restricts the number of external pins that can be on a chip. Processors often have more internal signals than external pins. Thus internal signals are connected to a digital multiplexer to allow it to switch which signal it is connected to which external pin. The multiplexers can be configured at runtime.
This is not a problem if only a few signals need to be pinned out for a given application. However, if many signals are needed, it can be difficult to configure what signals are connected to what external pins.
Although a signal may be connected to more than one external pin, the connection cannot be arbitrary. Each multiplexer may only be connected to so many signals.
Only one internal signal may be connected to an external pin at a time.
Timing constraints for a group of internal signals may restrict what connections can be used at the same time.
Multiple different signals or components may be able to fulfill a specific need, and each one may have a different set of external pins it can be connected to.
As such, the number of possible permutations of signal to pin connections for a given application may be enormous. This makes it very difficult to find a valid combination, or to prove that a valid combination simply does not exist.